// 引入vue 切记小写
import Vue from 'vue'
// 引入App
import App from './App.vue'

// 关闭Vue的生产提示
Vue.config.productionTip = false

//实现任意组件通信的前提:所有子组件都能看的见的(访问到)一个属性(傀儡),且这个属性同时能访问到Vue所有内置的方法。
// 下面是比较麻烦的写法 但原理是相同的。
// 使用vc组件实例对象,实现任意组件之间通信:
// 先接收到VueComponent,然后手动new出它的实例对象vc(因是傀儡,只作为组件之间通信的中转,所以无需配置项)
// const Vc = Vue.extend({})
// const vc = new Vc()
// 关键的来了: 所有组件实例对象都能访问到Vue.prototype.x吧？(因Vue底层维护:VueComponent.protype.__proto__==Vue.prototype)
// x是能访问到了,但是x并没有Vue的的内置方法呀(只是一个单纯的属性,拿不到Vue下的$on..等等方法),但我们创建出的傀儡vc(组件实例对象通过原型链可以访问到)有呀,这样组件之间可以通过$on自定义事件及回调,$emit触发事件传递数据.即完成了任意组件之间通信
// Vue.prototype.x = d

// 简易写法:利用钩子函数在Vue的实例vm刚刚创建出时(数据代理都未创建前)
// 直接在Vue原型上绑定傀儡属性$bus 然后给他vm(钩子函数内的this指向vm,vm是肯定有$on等Vue旗下所有的方法呀)
// 这不比上面vc写法简单点儿
new Vue({
    el: '#app',
    render: h => h(App),
    beforeCreate() {
        Vue.prototype.$bus = this
    }
})
